package com.rh.service.Impl;

import com.rh.exception.EducationException;
import com.rh.service.MsmService;
import com.sun.mail.util.MailSSLSocketFactory;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;


@Service
@Slf4j
public class MsmServiceImpl implements MsmService {
    /**
     * 发送验证码
     */
    @SneakyThrows
    @Override
    public String sendCode(String mobile){
        //调用生成验证码的方法生成验证码
        String code = getRandom();
        //校验邮箱格式
        Properties prop = new Properties();
        prop.setProperty("mail.host", "smtp.qq.com");  //设置QQ邮件服务器
        prop.setProperty("mail.transport.protocol", "smtp"); // 邮件发送协议
        prop.setProperty("mail.smtp.auth", "true"); // 需要验证用户名密码

        // 关于QQ邮箱，还要设置SSL加密，加上以下代码即可
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable", "true");
        prop.put("mail.smtp.ssl.socketFactory", sf);

        //使用JavaMail发送邮件的5个步骤

        //创建定义整个应用程序所需的环境信息的 Session 对象

        Session session = Session.getDefaultInstance(prop, new Authenticator() {
            @Override
            public PasswordAuthentication getPasswordAuthentication() {
                //发件人邮件用户名、授权码
                return new PasswordAuthentication("1403675721@qq.com", "csrwievpxmqkbahb");
            }
        });


        //开启Session的debug模式，这样就可以查看到程序发送Email的运行状态
        session.setDebug(true);

        //2、通过session得到transport对象
        Transport ts = session.getTransport();

        //3、使用邮箱的用户名和授权码连上邮件服务器
        ts.connect("smtp.qq.com", "1403675721@qq.com", "csrwievpxmqkbahb");

        //4、创建邮件

        //创建邮件对象
        MimeMessage message = new MimeMessage(session);

        //指明邮件的发件人
        message.setFrom(new InternetAddress(mobile));

        //指明邮件的收件人，现在发件人和收件人是一样的，那就是自己给自己发
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(mobile));

        //邮件的标题
        message.setSubject("测试邮件");

        //邮件的文本内容
        message.setContent("您的验证码是："+code+",5分钟之内有效", "text/html;charset=UTF-8");

        //5、发送邮件
        ts.sendMessage(message, message.getAllRecipients());
        ts.close();
        return code;
}
    /**
     * 生成4位数随机数
     */
    public static String getRandom(){
        StringBuffer buffer=null;
        for (int i = 0; i < 50; i++) {
            String sourse="1234567890";
            Random random = new Random();
            buffer=new StringBuffer();
            for (int j = 0; j < 4; j++) {
             buffer.append(sourse.charAt(random.nextInt(10)) + "");
            }
            String code=buffer.toString();
        }
            return buffer.toString();
    }

    //测试生成验证码
    public static void main(String[] args) {
        System.out.println(getRandom());
    }
}

